package com.next.aap.server.services;

import java.util.List;

import com.next.aap.client.AssemblyConstituencyDto;
import com.next.aap.client.AssemblyConstituencyWeb;
import com.next.aap.client.CandidateDto;
import com.next.aap.client.DistrictDto;
import com.next.aap.client.DistrictWeb;
import com.next.aap.client.ManifestoDto;
import com.next.aap.client.RegisterDeviceResponse;
import com.next.aap.client.RegisterFacebookUserProfile;
import com.next.aap.client.RegisterFacebookUserResponse;
import com.next.aap.client.StateDto;
import com.next.aap.client.UserDeviceWeb;
import com.next.aap.messages.FacebookUserRegisteredMessage;
import com.next.core.exception.AppException;

public interface AppService {

	public abstract RegisterDeviceResponse registerDevice(String deviceRegId) throws AppException;
	public abstract RegisterDeviceResponse registerDeviceAsync(String deviceRegId) throws AppException;

	public abstract FacebookUserRegisteredMessage registerFacebookUser(RegisterFacebookUserProfile registerFacebookUserProfile) throws AppException;
	
	public abstract RegisterFacebookUserResponse registerFacebookUserAsync(RegisterFacebookUserProfile registerFacebookUserProfile);
	
	public abstract List<UserDeviceWeb> getAndroidUserDevices(long startId,int pageSize) throws AppException;
	
	public abstract List<StateDto> getAllStates() throws AppException;
	
	public abstract List<DistrictDto> getAllDistrictOfState(long stateId) throws AppException;
	
	public abstract List<AssemblyConstituencyDto> getAllAssemblyConstituenciesOfDistrict(long districtId) throws AppException;
	
	public abstract StateDto saveState(StateDto stateDto) throws AppException;
	
	public abstract DistrictWeb saveDistrict(DistrictWeb districtWeb) throws AppException;
	
	public abstract List<DistrictWeb> saveDistricts(List<DistrictWeb> districtWeb) throws AppException;
	
	public abstract AssemblyConstituencyWeb saveAssemblyConstituency(AssemblyConstituencyWeb assemblyConstituencyWeb) throws AppException;
	
	public abstract List<AssemblyConstituencyWeb> saveAssemblyConstituencies(List<AssemblyConstituencyWeb> assemblyConstituencyList) throws AppException;
	
	public abstract CandidateDto saveCandidate(CandidateDto candidateDto) throws AppException;
	
	public abstract List<CandidateDto> getAllCandidates() throws AppException;

	public abstract ManifestoDto saveManifesto(ManifestoDto manifestoDto) throws AppException;
	
	public abstract List<ManifestoDto> getAllManifestos() throws AppException;

}